package com.jacobson.core.base

import android.os.Bundle
import com.jacobson.core.di.components.AppComponent

/**
 * ================================================
 * 框架要求框架中的每个 [android.app.Activity] 都需要实现此类,以满足规范
 * @author Wucz on 2018/7/16 14:43
 * ================================================
 */
interface IActivity {
    /**
     * 提供[AppComponent]给实现类，进行Component依赖
     * @param appComponent [AppComponent]全局单例
     */
    fun setupActivityComponent(appComponent: AppComponent)

    /**
     * 注入Bundle参数
     */
    fun injectBundleParameter()

    /**
     * 是否使用EventBus功能
     * @return
     * * true 开启EventBus功能
     * * false 关闭EventBus功能
     */
    fun useEventBus(): Boolean

    /**
     * 初始化View，返回0则不会进行调用 [android.app.Activity.setContentView]
     */
    fun initView(savedInstanceState: Bundle?): Int

    /**
     * 初始化数据，
     */
    fun initData(savedInstanceState: Bundle?)

    /**
     * 这个 Activity 是否会使用 Fragment,框架会根据这个属性判断是否注册
     * [android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks]
     * 如果返回***false***，那意味着这个 Activity 不需要绑定 Fragment,
     * 那你再在这个 Activity 中绑定继承于 [BaseFragment] 的 Fragment 将不起任何作用
     * @see ActivityLifecycle#registerFragmentCallbacks (Fragment 的注册过程)
     *
     */
    fun useFragment(): Boolean
}